package com.lagou.client;

import com.lagou.client.model.User;
import com.lagou.client.model.UserMessage;

import java.util.Scanner;

import java.io.File;
import java.util.LinkedList;
import java.util.List;

public class ClientView {
    /**
     * 为了可以使用输入输出流，采用合成复用原则实现
     */
    private ClientInitClose cic;


    /**
     * 通过构造方法实现成员变量的初始化
     * @param cic
     */

    public  ClientView(ClientInitClose cic){
        this.cic = cic;
    }

    /**
     * 自定义成员方法实现客户端主界面的绘制
     */
    public void clientMainPage() throws Exception {
        while(true) {
            System.out.println("  \n\n\t\t   在线考试系统");
            System.out.println("-------------------------------------------");
            System.out.print("   [1] 学员系统");
            System.out.println("     [2] 管理员系统");
            System.out.println("   [0] 退出系统");
            System.out.println("-------------------------------------------");
            System.out.println("请选择要进行的业务编号：");
//            Scanner sc = new Scanner(System.in);
//            int choose = sc.nextInt();
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    System.out.println("正在进入学员系统...");
                    break;
                case 2:
                    System.out.println("正在进入管理员系统");
                    clientManagerLogin();
                    return;
                case 0:
                    System.out.println("正在退出系统...");
                    return;
                default:
                    System.out.println("输入错误，请重新选择！");
            }
        }
    }

    /**
     * 自定义成员方法实现客户端管理员登录的功能
     */
    private void clientManagerLogin() throws Exception {
        // 准备管理员登陆的相关数据
        System.out.println("输入管理员账户信息");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入管理员密码");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("managerCheck",new User(userName,password));
        // 2.将UserMessage类型的对象通过对象输出流发送给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送管理员账户信息成功!");

        //接受服务器处理结果并给出提示
         tum = (UserMessage) cic.getOis().readObject();
         if("success".equals(tum.getType())){
             System.out.println("登陆成功,进入学员管理系统");
             StudentTest1();
         }else {
             System.out.println("用户名或密码错误");
         }

    }

    /**
     * 自定义成员方法实现学员管理的功能
     */
    public void StudentTest1() throws Exception{
        // 创建集合
        List<Student> list = new LinkedList<>();
        AdditionsDeletionsModifications adm = new AdditionsDeletionsModifications();

        // 指向学生集合文件
        File txt = null;
        try {
            txt = new File("D:/a.txt");
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 判断文件是否存在
        if (txt.exists()) {
            if (ReadList.rdList() != null){
                list = ReadList.rdList(); //遍历文件,复制给list集合
                System.out.println(list);
            }else {
                System.out.println("为空");
            }
        }else{
            // 如果不存在则创建一个新集合
            list = new LinkedList<>();
        }

        while (true) {
            // 1、绘制字符界面
            System.out.println("           欢迎来到学生信息管理系统");
            System.out.println("------------------------------------------");
            System.out.println("           请输入你要操作的选项");
            System.out.print("[0]退出系统" + " ");
            System.out.print("[1]增加学生信息" + " ");
            System.out.print("[2]删除学生编号" + " ");
            System.out.print("[3]修改学生信息" + " ");
            System.out.print("[4]编号查找学生信息" + " ");
            System.out.println("[5]查看所有学生信息" + " ");
            System.out.println("------------------------------------------");
            Scanner sc = new Scanner(System.in);
            int choose = sc.nextInt();

            // 2.使用swith case分支结构来模拟用户的选择并给出提示
            switch (choose) {
                case 0:
                    System.out.println("正在退出学员系统...");
                    WriteList.wrList(list);  //退出时把文件写入集合
                    break;
                case 1:
                    // 增加学生信息
                    System.out.println("增加学生信息...,请输入id、姓名、年龄、");
                    System.out.println("输入id");
                    int id = sc.nextInt();
                    System.out.println("输入姓名");
                    String name = sc.next();
                    System.out.println("输入年龄");
                    int age = sc.nextInt();
                    adm.stu_add(id, name, age,list); //调用父类添加方法添加
                    break;
                case 2:
                    // 删除学生信息
                    System.out.println("删除学生信息");
                    System.out.println("输入需要删除的id");
                    id = sc.nextInt();
                    adm.deletions(list, id); ////传入集合和id调用父类删除方法删除
                    break;

                case 3:
                    // 修改学生信息
                    System.out.println("修改学生信息,请输入要修改的学生id");
                    id = sc.nextInt();  //修改前先查找有没有这个对象
                    Student getStudent = adm.Numbering(id, list);
                    if (null == getStudent){
                        System.out.println("无对象!");
                        break;
                    }
                    System.out.println("输入修改后的id");
                    id = sc.nextInt();
                    System.out.println("输入修改后的姓名");
                    name = sc.next();
                    System.out.println("输入修改后的年龄");
                    age = sc.nextInt();
                    adm.modifications(id, name, age,getStudent); //调用父类修改方法, 传入查找到的对象
                    break;

                case 4:
                    System.out.println("编号查找学生信息,请输入id");
                    id = sc.nextInt();
                    Student numbering = adm.Numbering(id,list);  //调用父类查找方法
                    if (null == numbering){
                        System.out.println("无对象!");
                    }else {
                        System.out.println("查询成功" + numbering);
                    }

                case 5:
                    // 打印所有学生信息
                    System.out.println("所有学生信息");
                    System.out.println(list);
                    break;

                default:
                    System.out.println("输入错误，请重新选择!");
            }
            if (0 == choose)
                break;

        }
    }






    }
